package numDecodings

// 递归

import (
	"strconv"
)

func numDecodings(s string) int {
	if i, _ := strconv.Atoi(s[0:1]); i == 0 {
		return 0
	}

	l := len(s)

	if l == 1 {
		return 1
	}

	if l == 2 {
		if i, _ := strconv.Atoi(s); i > 26 {
			if i, _ := strconv.Atoi(s[1:2]); i == 0 {
				return 0
			}
			return 1
		}
		if i, _ := strconv.Atoi(s[1:2]); i == 0 {
			return 1
		}
		return 2
	}

	if i, _ := strconv.Atoi(s[1:2]); i == 0 {
		return numDecodings(s[2:])
	}

	n := numDecodings(s[:2])
	if n == 0 {
		return 0
	}
	if n == 2 {
		return numDecodings(s[2:]) + numDecodings(s[1:])
	}

	return numDecodings(s[1:])
}
